{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7cac99a4",
   "metadata": {},
   "source": [
    "# B-Spline \n",
    "\n",
    "开一个演示讲义. scipy 自带 BSpline 模块."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2cdb9ecc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from scipy.interpolate import BSpline as bspline\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a5f2f8f",
   "metadata": {},
   "source": [
    "我们先利用内置的 B 样条模块, 对样条基函数建立一个直观感受:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "32b179ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_basis(N, n, i):\n",
    "    t = np.linspace(-10, 10, num = N + n + 1, endpoint=True)\n",
    "    f = np.zeros((N, N))\n",
    "    for j in range(N):\n",
    "        f[j, j] = 1\n",
    "    spl = bspline(t, f[i,:], n)\n",
    "    x = np.linspace(t[n], t[-(n+1)], num=400, endpoint=True)\n",
    "    o = np.ones(len(x))\n",
    "    plt.plot(x, spl(x), x, o, '--')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a547de80",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "draw_basis(10, 1, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "856c605f",
   "metadata": {},
   "source": [
    "画出全部 $n$ 阶 B 样条基函数:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7f175f31",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 2\n",
    "N = 10\n",
    "for i in range(N):\n",
    "    draw_basis(N, n, i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "5f57abd0",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (3173362448.py, line 17)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"/tmp/ipykernel_5194/3173362448.py\"\u001b[0;36m, line \u001b[0;32m17\u001b[0m\n\u001b[0;31m    plt::save(\"Bspline.png\");\u001b[0m\n\u001b[0m        ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "def rdraw_basis(N, n, i):\n",
    "    t = np.linspace(0, N, num = N+1 , endpoint=True)\n",
    "    print(t)\n",
    "    f = np.zeros((N, N))\n",
    "    for j in range(N):\n",
    "        f[j, j] = 1\n",
    "    spl = bspline(t, f[i,:], n)\n",
    "    x = np.linspace(t[n], t[-(n+1)], num=400, endpoint=True)\n",
    "    o = np.ones(len(x))\n",
    "    plt.plot(x, spl(x), x, o, '--')\n",
    "    \n",
    "n = 2\n",
    "N = 10\n",
    "for i in range(N):\n",
    "    rdraw_basis(N, n, i)\n",
    "    \n",
    "plt::save(\"Bspline.png\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "42790273",
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.interpolate import BSpline\n",
    "k = 2\n",
    "t = [0, 1, 2, 3, 4, 5, 6]\n",
    "c = [-1, 2, 0, -1]\n",
    "spl = BSpline(t, c, k)\n",
    "spl(2.5)\n",
    "n = 6\n",
    "x = np.linspace(0, 6, num=400, endpoint=True)\n",
    "o = np.ones(len(x))\n",
    "plt.plot(x, spl(x), x, o, '--')"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
